import type { IBaseEntity } from '../common/base';
import type { CourseCategoryStatusEnum } from './enums';

/**
 * 课程分类实体接口
 * @description 课程分类的完整信息结构
 */
export interface ICourseCategory extends IBaseEntity {
  /** 分类名称 */
  name: string;
  /** 分类代码 */
  categoryCode: string;
  /** 分类描述 */
  description?: string;
  /** 分类颜色 */
  color: string;
  /** 排序权重 */
  sortOrder: number;
  /** 分类状态 */
  status: CourseCategoryStatusEnum;
  /** 分类图标 */
  icon?: string;
  /** 父分类ID（支持层级分类） */
  parentId?: string;
  /** 分类层级 */
  level: number;
  /** 分类路径（用于层级显示） */
  path?: string;
  /** 是否为预设分类 */
  isPreset: boolean;
  /** 是否允许删除 */
  deletable: boolean;
  /** 分类标签 */
  tags?: string[];
  /** 备注信息 */
  remark?: string;
}

/**
 * 课程分类创建请求
 * @description 创建课程分类时需要的数据
 */
export type ICourseCategoryCreateRequest = Omit<ICourseCategory, 'id' | 'createdAt' | 'updatedAt' | 'level' | 'path'>;

/**
 * 课程分类更新请求
 * @description 更新课程分类信息时的数据
 */
export type ICourseCategoryUpdateRequest = Partial<ICourseCategoryCreateRequest> & {
  /** 分类ID */
  id: string;
};

/**
 * 课程分类查询参数
 * @description 查询课程分类时的筛选条件
 */
export interface ICourseCategoryQueryParams {
  /** 分类名称（模糊搜索） */
  name?: string;
  /** 分类代码 */
  categoryCode?: string;
  /** 父分类ID */
  parentId?: string;
  /** 分类状态 */
  status?: CourseCategoryStatusEnum;
  /** 分类层级 */
  level?: number;
  /** 是否为预设分类 */
  isPreset?: boolean;
  /** 是否允许删除 */
  deletable?: boolean;
  /** 分类标签 */
  tags?: string[];
}

/**
 * 课程分类树节点
 * @description 用于树形显示的分类节点
 */
export interface ICourseCategoryTreeNode extends ICourseCategory {
  /** 子分类列表 */
  children?: ICourseCategoryTreeNode[];
  /** 课程数量 */
  courseCount: number;
  /** 是否展开 */
  expanded?: boolean;
  /** 是否可选择 */
  selectable?: boolean;
  /** 是否禁用 */
  disabled?: boolean;
}

/**
 * 课程分类统计信息
 * @description 课程分类相关的统计数据
 */
export interface ICourseCategoryStatistics {
  /** 分类总数 */
  totalCount: number;
  /** 正常分类数 */
  activeCount: number;
  /** 禁用分类数 */
  disabledCount: number;
  /** 预设分类数 */
  presetCount: number;
  /** 自定义分类数 */
  customCount: number;
  /** 各层级分类数量 */
  levelDistribution: Array<{
    level: number;
    count: number;
  }>;
  /** 分类使用情况 */
  usageDistribution: Array<{
    categoryId: string;
    categoryName: string;
    courseCount: number;
  }>;
}

/**
 * 课程分类简要信息
 * @description 用于选择器等组件的简要信息
 */
export interface ICourseCategorySummary {
  /** 分类ID */
  id: string;
  /** 分类名称 */
  name: string;
  /** 分类代码 */
  categoryCode: string;
  /** 分类颜色 */
  color: string;
  /** 分类图标 */
  icon?: string;
  /** 父分类ID */
  parentId?: string;
  /** 分类层级 */
  level: number;
  /** 分类路径 */
  path?: string;
  /** 分类状态 */
  status: CourseCategoryStatusEnum;
  /** 课程数量 */
  courseCount: number;
}

/**
 * 预设课程分类
 * @description 系统预设的课程分类配置
 */
export interface IPresetCourseCategory {
  /** 分类名称 */
  name: string;
  /** 分类代码 */
  categoryCode: string;
  /** 分类描述 */
  description: string;
  /** 分类颜色 */
  color: string;
  /** 分类图标 */
  icon: string;
  /** 排序权重 */
  sortOrder: number;
  /** 分类标签 */
  tags: string[];
}

/**
 * 课程分类关联信息
 * @description 课程与分类的关联关系
 */
export interface ICourseCategoryRelation {
  /** 课程ID */
  courseId: string;
  /** 分类ID */
  categoryId: string;
  /** 关联时间 */
  relationTime: number;
  /** 是否为主分类 */
  isPrimary: boolean;
}